package com.cloudfast.platform.org.service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.cloudfast.common.page.Page;
import com.cloudfast.platform.org.dao.OrgDao;
import com.cloudfast.platform.org.entity.Org;

/**
 * @author liuyw
 * @描述:部门service
 * @date 2020年4月10日
 */
@Service
@Transactional(readOnly = true)
public class OrgService {
    protected static final Logger logger = LoggerFactory.getLogger(Logger.class);

    @Autowired
    private OrgDao orgDao;

    private String sql = "from Org where 1=1 ";

    /**
     * @描述:保存
     * @author liuyw
     * @date 2020年4月10日
     */
    @Transactional(readOnly = false)
    public void save(Org entity) {
        try {
            orgDao.saveOrUpdate(entity);
        } catch (Exception e) {
            logger.error(e.getMessage());
        }

    }

    /**
     * @描述:删除
     * @author liuyw
     * @date 2020年4月10日
     */
    @Transactional(readOnly = false)
    public void delete(Long id) {
        orgDao.deleteById(id);
    }

    /**
     * @param id
     * @return
     * @描述:根据id查询
     * @author liuyw
     * @date 2020年4月10日
     */
    public Org findOne(Long id) {
        return orgDao.findOne(id);
    }

    /**
     * @param page
     * @param entity
     * @return
     * @描述:分页
     * @author liuyw
     * @date 2020年4月10日
     */
    public Page<Org> findPage(Page<Org> page, Org entity) {
        StringBuilder hql = new StringBuilder(sql);
        Map<String, Object> params = new HashMap<>(2);
        if (StringUtils.isNotEmpty(entity.getOrgName())) {
            hql.append(" and orgName=:orgName ");
            params.put("orgName", entity.getOrgName());
        }
        if (StringUtils.isNotEmpty(entity.getOrgCode())) {
            hql.append(" and orgCode=:orgCode ");
            params.put("orgName", entity.getOrgName());
        }
        hql.append(" and delFlag='0' ");

        return this.orgDao.findPage(page, hql.toString(), params);
    }

    /**
     * @param id
     * @param orgCode
     * @return @
     * @描述:检测部门编码是否存在
     * @author liuyw
     * @date 2020年4月20日
     */
    public int checkCode(Long id, String orgCode) {
        Map<String, Object> params = new HashMap<>(2);

        StringBuilder hql = new StringBuilder(sql);
        hql.append(" and orgCode=:orgCode");
        params.put("orgCode", orgCode);
        if (id != null && id > 0) {
            hql.append(" and id!=:id");
            params.put("id", id);
        }
        List<Org> list = orgDao.findList(hql.toString(), params);
        if (list != null && !list.isEmpty()) {
            return list.size();
        }
        return 0;
    }

    /**
     * 根据父id 查询
     *
     * @param parentId
     * @return
     */
    public List<Org> findSelectTree(Long parentId) {
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("parentId", parentId);
        StringBuilder hql = new StringBuilder("from Org where 1=1 and parentId=:parentId and delFlag='0'");
        return this.orgDao.findList(hql.toString(), params);
    }

    /**
     * 查询顶级机构
     *
     * @return
     */
    public Org findTopOrg() {
        return orgDao.findList("from Org").get(0);
    }
}
